
using System;
using Core.Base;
using Core.Contracts.Enums;
using Core.Contracts.Interfaces;
using Core.Features;
using Core.Resources;
using Core.Extensions;

namespace Core.Items.Robots
{
    /// <summary>
    /// Riveler mk2 robot class
    /// </summary>
    
    public sealed class RivelerMk2 : RobotBase
    {
        /// <summary>
        /// Create a new instance of the <see cref="T:Core.Items.Robots.RivelerMk2"/> class.
        /// </summary>
        public RivelerMk2()
            : base(
            "Riveler Mk2",
            Traduction.desc_riveler,
            FactionsEnum.Industrial,
            RobotTechnologyLevel.Mk2,
            RobotSizesEnum.HeavyMech,
            new ISlot[]{ 
				new Slot(0, SlotGroupsEnum.Chassis, SlotTypesEnum.Industrial, SizesEnum.Small|SizesEnum.Medium),
				new Slot(1, SlotGroupsEnum.Chassis, SlotTypesEnum.Misc|SlotTypesEnum.Industrial, SizesEnum.Small|SizesEnum.Medium),
				new Slot(2, SlotGroupsEnum.Chassis, SlotTypesEnum.Industrial, SizesEnum.Small|SizesEnum.Medium),
				new Slot(3, SlotGroupsEnum.Chassis, SlotTypesEnum.Misc|SlotTypesEnum.Industrial, SizesEnum.Small|SizesEnum.Medium),
				new Slot(4, SlotGroupsEnum.Chassis, SlotTypesEnum.Misc|SlotTypesEnum.Industrial, SizesEnum.Small|SizesEnum.Medium),
				new Slot(5, SlotGroupsEnum.Chassis, SlotTypesEnum.Turret|SlotTypesEnum.Missile|SlotTypesEnum.Misc, SizesEnum.Small|SizesEnum.Medium),
				new Slot(SlotGroupsEnum.Head, SlotTypesEnum.Modules),
				new Slot(SlotGroupsEnum.Head, SlotTypesEnum.Modules),
				new Slot(SlotGroupsEnum.Head, SlotTypesEnum.Modules),
				new Slot(SlotGroupsEnum.Head, SlotTypesEnum.Modules),
				new Slot(SlotGroupsEnum.Head, SlotTypesEnum.Modules),
				new Slot(SlotGroupsEnum.Legs, SlotTypesEnum.Modules),
				new Slot(SlotGroupsEnum.Legs, SlotTypesEnum.Modules),
				new Slot(SlotGroupsEnum.Legs, SlotTypesEnum.Modules),
				new Slot(SlotGroupsEnum.Legs, SlotTypesEnum.Modules),
				new Slot(SlotGroupsEnum.Legs, SlotTypesEnum.Modules),
				new Slot(SlotGroupsEnum.Legs, SlotTypesEnum.Modules), },
            new IFeature<object>[]{ 
				new AccumulatorCapacity<double>(3250),
				new AccumulatorRechargeTime<double>(360),
				new CpuPerformance<double>(450),
				new ReactorPerformance<double>(800),
				new ArmorAmount<double>(3000),
				new ChemicalResistance<double>(30),
				new KineticResistance<double>(45),
				new SeismicResistance<double>(45),
				new ThermalResistance<double>(45),
				new SurfaceHitSize<double>(11.00),
				new InterferenceEmission<double>(4.00),
				new InterferenceMinimum<double>(75.00),
				new InterferencePeak<double>(340.00),
				new InterferenceRadius<double>(200.00),
				new LockingRange<double>(210),
				new LockingTime<double>(12.50),
				new MaximumTargets<double>(6),
				new MissileGuidanceFailure<double>(0.1),
				new SensorStrength<double>(85),
				new SignalDetection<double>(75.00),
				new SignalMasking<double>(75.00),
				new ReloadingTime<double>(10),
				new CargoCapacity<double>(21.00),
				new RobotMass<double>(48900.00),
				new SlopeCapacity<double>(51),
				new TopSpeed<double>(43.20),
				new Volume<double>(31.00), },
             new IBonusModifier[]
                {
                    new BonusModifier<AdvancedRobotics>( FeatureTypesEnum.Module, FeaturesEnum.MinerCycleTime, -0.05) { Unit = UnitsEnum.Percentage, DisplayName = "Miner cycle time" },
                    new BonusModifier<AdvancedRobotics>( FeatureTypesEnum.Module, FeaturesEnum.MinedAmount, 0.05) { Unit = UnitsEnum.Percentage, DisplayName = "Mined amount" },
                    new BonusModifier<AdvancedRobotics>( FeatureTypesEnum.Module, FeaturesEnum.ChemicalResistance, 0.05) { Unit = UnitsEnum.Percentage, DisplayName = "Chemical resistance" },
                    new BonusModifier<AdvancedRobotics>( FeatureTypesEnum.Module, FeaturesEnum.KineticResistance, 0.05) { Unit = UnitsEnum.Percentage, DisplayName = "Kinetic resistance" },
                    new BonusModifier<AdvancedRobotics>( FeatureTypesEnum.Module, FeaturesEnum.SeismicResistance, 0.05) { Unit = UnitsEnum.Percentage, DisplayName = "Seismic resistance" },
                    new BonusModifier<AdvancedRobotics>( FeatureTypesEnum.Module, FeaturesEnum.ThermalResistance, 0.05) { Unit = UnitsEnum.Percentage, DisplayName = "Thermal resistance" },
                    new BonusModifier<IndustrialRobotControl>( FeatureTypesEnum.Module, FeaturesEnum.MinedAmount, 0.01) { Unit = UnitsEnum.Percentage, DisplayName = "Mined amount" },
                },
            new ICondition<IExtension>[]
                {
                    new ExtensionCondition<AdvancedRobotics>(4),
                    new ExtensionCondition<IndustrialRobotControl>(10)
                })
        {
        }
    }
}